home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 November / PCWorld_2007-11_cd.bin / komunikace / plainhtml / ph45_ENU_Setup.exe / {app} / res / rssDisplay.js < prev    next >
Text File  |  2006-09-07  |  7KB  |  300 lines

  1. /*
  2.     BDS Welcome Page - RSS Display Module
  3.  
  4.     Copyright (c) 2004, 2005 Borland Software Corporation
  5.  
  6.     Written by Daniel Wischnewski, Borland SE Germany.
  7.     Co-Admin of www.delphipraxis.net -- The German Delphi Community
  8.     Email: dwischnewski@gatenetwork.com
  9. */
  10.  
  11. var FEED_OK = 00;
  12. var FEED_OFFLINE = 01;
  13. var FEED_CACHE = 02;
  14. var FEED_CONN_ERROR = 10;
  15. var FEED_NODATA = 11;
  16. var FEED_XML4_ERROR = 12;
  17. var FEED_OFFLINE_NODATA = 13;
  18.  
  19. function displayRss(docNode, xmlSource, xslSource)
  20. {
  21.     try
  22.     {
  23.         docNode.innerHTML = xmlSource.transformNode(xslSource);
  24.         docNode.style.visibility = 'visible';
  25.     } catch(e) {
  26.         docNode.style.visibility = 'hidden';
  27.         debugAlert(e.message);
  28.     }
  29. }
  30.  
  31. function determineDefaultFeed()
  32. {
  33.     var item;
  34.     var xmlDefault;
  35.  
  36.     // check personal settings
  37.     item = getSubNode(getSettingsNode(xmlPersonal), 'defaultFeed');
  38.     if (getItemValue(item, 'link') == '')
  39.     {
  40.         xmlDefault = loadLocalXmlDoc('rssFeeds.xml');
  41.         item = xmlDefault.selectSingleNode('.//item[@default]');
  42.         if (item == null)
  43.         {
  44.             item = xmlDefault.selectSingleNode('.//item');
  45.         }
  46.     }
  47.     return item;
  48. }
  49.  
  50. function doDownloadNews(xmlHTTP, linkUrl)
  51. {
  52.     var lResolve;
  53.     var lConnect;
  54.     var lSend;
  55.     var lReceive;
  56.     var xmlDoc;
  57.  
  58.     if (!clientIsOnline)
  59.     {
  60.         return null;
  61.     }
  62.  
  63.     try
  64.     {
  65.         lResolve = 20 * 1000;    // Timeout values are in milli-seconds
  66.         lConnect = 30 * 1000;
  67.         lSend = 30 * 1000;
  68.         lReceive = 30 * 1000;
  69.         xmlHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive);
  70.         if (clientUsesProxy & clientProxyString != "")
  71.         {
  72.             xmlHTTP.setProxy(2, clientProxyString);
  73.         }
  74.         xmlHTTP.open("GET", linkUrl, false);
  75.         if (clientProxyUser != "" && clientProxyPassword != "")
  76.         {
  77.             xmlHTTP.setProxyCredentials(clientProxyUser, clientProxyPassword);
  78.         }
  79.         xmlHTTP.setRequestHeader("User-Agent", clientUserAgentString);
  80.         xmlHTTP.send();
  81.         if (xmlHTTP.status != 200)
  82.         {
  83.             debugAlert("HTTP Status: " + xmlHTTP.status);
  84.             return null;
  85.         }
  86.     } catch(e) {
  87.         debugAlert("JS Error Message: " + e.message);
  88.         setClientIsOnline(false);
  89.         return null;
  90.     }
  91.     try
  92.     {
  93.         xmlDoc = getXmlDoc();
  94.         xmlDoc.load(xmlHTTP.responseStream);
  95.         if (xmlDoc.parseError.errorCode == 0)
  96.         {
  97.             return xmlDoc;
  98.         } else {
  99.             debugAlert("XML Error Code: " + xmlDoc.parseError.errorCode);
  100.             return null;
  101.         }
  102.     } catch(e) {
  103.         debugAlert("JS Error Message: " + e.message);
  104.         return null;
  105.     }
  106. }
  107.  
  108. function doGetNews(localContent, cacheXml, date)
  109. {
  110.     var xmlHTTP;
  111.     var xmlDoc;
  112.  
  113.     try
  114.     {
  115.         xmlHTTP = getXmlHttpDoc();
  116.     } catch(e) {
  117.         return FEED_XML4_ERROR;
  118.     }
  119.  
  120.     if (getItemValue(cacheXml, "@link").indexOf("://") >= 0)
  121.     {
  122.         isLocal = false;
  123.         try
  124.         {
  125.             if(localContent == null)
  126.             {
  127.                 xmlDoc = doDownloadNews(xmlHTTP, getItemValue(cacheXml, "@link"));
  128.                 if (xmlDoc == null)
  129.                 {
  130.                     return FEED_CONN_ERROR;
  131.                 }
  132.             } else {
  133.                 xmlDoc = getXmlDoc();
  134.                 xmlDoc.load(wpPath + getItemValue(cacheXml, "@link"));
  135.             }
  136.         } catch(e) {
  137.             return FEED_CONN_ERROR;
  138.         }
  139.     } else {
  140.         isLocal = true;
  141.         xmlDoc = getXmlDoc();
  142.         xmlDoc.load(wpPath + getItemValue(cacheXml, "@link"));
  143.         if (xmlDoc.parseError.errorCode != 0) {
  144.             xmlDoc.load(getItemValue(cacheXml, "@link"));
  145.         }
  146.     }
  147.     // quick'n dirty remove off all subnodes
  148.     cacheXml.text = "";
  149.     items = xmlDoc.getElementsByTagName("channel");
  150.     for (var i = 0; i < items.length; i++)
  151.     {
  152.         cacheXml.appendChild(items[i]);
  153.     }
  154.  
  155.     if (!isLocal)
  156.     {
  157.         setAttrValue(cacheXml, "lastLoad", date.toLocaleDateString());
  158.         saveRssCache();
  159.     }
  160.  
  161.     return FEED_OK;
  162. }
  163.  
  164. function getFeed(feedDataNode)
  165. {
  166.     var date;
  167.     var downloadNews;
  168.     var rssDoc;
  169.     downloadNews = false;
  170.     date = new Date();
  171.     // check cached feed data
  172.     if (getItemValue(feedDataNode, "reload") == "1")
  173.     {
  174.         downloadNews = true;
  175.         feedDataNode.removeChild(getSubNode(feedDataNode, "reload"));
  176.     }
  177.     URI = getItemValue(feedDataNode, "link");
  178.     currentFeed = URI;
  179.     cacheXml = getSubNodeEx(xmlRssCache.documentElement, "rss", "link", URI);
  180.     if (getItemValue(cacheXml, "@lastLoad") != date.toLocaleDateString())
  181.     {
  182.         downloadNews = true;
  183.     }
  184.     if (downloadNews)
  185.     {
  186.         downloadResult = doGetNews(feedDataNode.getAttributeNode("localcontent"), cacheXml, date);
  187.     } else {
  188.         downloadResult = FEED_CACHE;
  189.     }
  190.     rssDoc = getXmlDoc();
  191.     rssDoc.appendChild(cacheXml.cloneNode(true));
  192.  
  193.     return rssDoc;
  194. }
  195.  
  196. function saveSettings(selectBox)
  197. {
  198.     var idx;
  199.     var dummy;
  200.     var reload;
  201.     var newFeedUrl;
  202.     var newFeedTxt;
  203.     var defaultFeed;
  204.  
  205.     idx = selectBox.selectedIndex;
  206.     dummy = selectBox[idx].value.split(";");
  207.     reload = dummy[0];
  208.     newFeedUrl = dummy[1];
  209.     newFeedTxt = selectBox[idx].text;
  210.  
  211.     defaultFeed = getSubNode(getSettingsNode(xmlPersonal), 'defaultFeed');
  212.     getSubNode(defaultFeed, 'link').text = newFeedUrl;
  213.     getSubNode(defaultFeed, 'title').text = newFeedTxt;
  214.     getSubNode(defaultFeed, 'reload').text = reload;
  215. }
  216.  
  217. function displayThisRss(rssDocument)
  218. {
  219.     displayRss(rssContent, rssDocument, loadLocalXslDoc('rssFeeds.xsl'));
  220. }
  221.  
  222. function displayDefaultRss()
  223. {
  224.     displayThisRss(getFeed(determineDefaultFeed(xmlPersonal)));
  225. }
  226.  
  227. function rssFeedSelected()
  228. {
  229.     var selectBox;
  230.  
  231.     selectBox = document.getElementById('rssFeeds');
  232.  
  233.     if (!selectBox[selectBox.selectedIndex].disabled) {
  234.         saveSettings(selectBox);
  235.         setClientIsOnline(external.Application.IsOnline)
  236.         displayDefaultRss();
  237.         savePersonalSettings();
  238.     }
  239. }
  240.  
  241. function clearRssCache()
  242. {
  243.     var rootNode;
  244.     var nodesCache;
  245.  
  246.     rootNode = xmlRssCache.documentElement;
  247.     nodesCache = rootNode.selectNodes('rss');
  248.     for (var i = 0; i < nodesCache.length; i++)
  249.     {
  250.         rootNode.removeChild(nodesCache.item(i));
  251.     }
  252.     
  253.     saveRssCache();
  254.     rssFeedSelected();
  255. }
  256.  
  257. function showRss(rssSourceFile)
  258. {
  259.     displayRss(rssContent, loadXmlDoc(rssSourceFile), loadLocalXslDoc('rssFeeds.xsl'));
  260. }
  261.  
  262. function getCurrentVersion(id, updateURL, originalVersion)
  263. {
  264.     var cacheXml;
  265.     var date;
  266.     var xmlHTTP;
  267.     var xmlDoc;
  268.     var items;
  269.  
  270.     try
  271.     {
  272.         xmlHTTP = getXmlHttpDoc();
  273.         date = new Date();
  274.         cacheXml = getSubNodeEx(getSettingsNode(xmlPersonal), 'rss', 'id', id);
  275.         
  276.         if (getItemValue(cacheXml, "@lastLoad") != date.toLocaleDateString())
  277.         {
  278.             xmlDoc = doDownloadNews(xmlHTTP, updateURL);
  279.         }
  280.         if (xmlDoc != null)
  281.         {
  282.             setAttrValue(cacheXml, "lastLoad", date.toLocaleDateString());
  283.             items = xmlDoc.getElementsByTagName("channel");
  284.             cacheXml.text = "";
  285.             for (var i = 0; i < items.length; i++)
  286.             {
  287.                 cacheXml.appendChild(items[i]);
  288.             }
  289.             savePersonalSettings();
  290.         }
  291.         if (cacheXml.selectNodes('channel').length > 0)
  292.         {
  293.             return cacheXml;
  294.         } else {
  295.             return loadXmlDoc(originalVersion);
  296.         }
  297.     } catch(e) {
  298.     }
  299. }
  300.